importPackage(Packages.de.elo.ix.client);
//@include lib_Class.js
//@include lib_sol.common.ix.ServiceBase.js
var logger = sol.create("sol.Logger", { scope: "sol.common.ix.services.KwlDataCollector" });
/**
* Collects dynamic keyword list and/or keyword list entries
* and delivers the data as compact JSON objects
* e.g. for dashboards
*
* # Example
*
* var result = sol.common.IxUtils.execute("RF_sol_common_services_kwlDataCollector", {
* kwlConfig: [
* {
* id: "INVOICE_STATUS"
* }
* ],
* dynKwlConfig: [
* {
* scriptName: "sol.invoice.ix.dynkwl.Currency",
* focusFieldName: "INVOICE_CURRENCY_CODE",
* keyFieldName: "INVOICE_CURRENCY_CODE",
* valueFieldName: "IX_MAP_INVOICE_CURRENCY_SYMBOL"
* }
* ]
* });
*
* # Result
*
* {
* "version": "1",
* "kwls": {
* "INVOICE_STATUS": {
* "formatter": "sol.common.ix.services.KwlDataCollector.FlatKwl",
* "values": ["1 Erfassung",
* "2 Formelle Prüfung",
* "3 Fachliche Prüfung"]
* }
* },
* "dynKwls": {
* "sol.invoice.ix.dynkwl.Currency": {
* "formatter": "sol.common.ix.services.KwlDataCollector.SimpleKeyMapDynKwl",
* "values": {
* "EUR": "€",
* "USD": "$",
* }
* }
* }
* }
*
* # Example for a localized keyword list
*
* result = sol.common.IxUtils.execute("RF_sol_common_services_KwlDataCollector", {
* dynKwlConfig: [
* {
* scriptName: "sol.contract.ix.localizedKwl.Status",
* focusFieldName: "CONTRACT_STATUS",
* keyFieldName: "$KEY",
* valueFieldName: "$VALUE"
* }
* });
*
*
* @author MW, ELO Digital Office GmbH
* @version 1.03.000
*
* @eloix
*
* @requires sol.common.JsonUtils
* @requires sol.common.ix.RfUtils
* @requires sol.common.ix.ServiceBase
*/
sol.define("sol.common.ix.services.KwlDataCollector", {
extend: "sol.common.ix.ServiceBase",
initialize: function (config) {
var me = this;
me.ec = config.ec;
me.$super("sol.common.ix.ServiceBase", "initialize", [config]);
me.kwlConfig = config.kwlConfig;
me.dynKwlConfig = config.dynKwlConfig;
me.data = {
version: "1.00.000"
};
},
/**
* Starts the collection of the desired data
* @return {String}
*/
execute: function () {
var me = this;
me.rfUtils = sol.common.ix.RfUtils;
if (me.kwlConfig) {
me.addKeywordListData();
}
if (me.dynKwlConfig) {
me.addDynKeywordListData();
}
return me.rfUtils.stringify(me.data);
},
/**
* @private
*/
addKeywordListData: function () {
var me = this,
kwl;
me.data.kwls = {};
me.kwlConfig.forEach(function (config) {
kwl = sol.create("sol.common.ix.services.KwlDataCollector.FlatKwl", {
data: "",
config: config
});
me.data.kwls[config.id] = kwl.build();
});
},
/**
* @private
*/
addDynKeywordListData: function () {
var me = this,
dynKwl;
me.data.dynKwls = {};
me.dynKwlConfig.forEach(function (config) {
var propertyName = config.scriptName;
dynKwl = sol.create("sol.common.ix.services.KwlDataCollector.SimpleKeyMapDynKwl", {
data: "",
config: config
});
if (config.foreignKeyValue) {
propertyName += ("_" + config.foreignKeyValue);
}
me.data.dynKwls[propertyName] = dynKwl.build();
});
}
});
/**
* @private
* Retrieves data which is provided by keyword list
*
* @author Michael Weiler, ELO Digital Office GmbH
* @version 1.0
*
* @eloix
* @elojc
* @eloas
*/
sol.define("sol.common.ix.services.KwlDataCollector.BaseKwl", {
/**
* @cfg {String} scriptName
* Script name of the dynamic keyword list
*/
/**
* @cfg {String} formatter
* Class name of the task formatter
*/
/**
* @private
* Retrieves data from a dynamic keyword list by the ELO index server
*/
getValues: function () {
var me = this,
rootKeyword;
me.result = {
formatter: me.config.formatter
};
me.keywordLists = {};
rootKeyword = ixConnect.ix().checkoutKeywords([me.config.id], KeywordC.mbEdit, -1, LockC.NO)[0];
if (rootKeyword) {
me.processChildren(rootKeyword, me.keywordLists, rootKeyword.id);
}
},
/**
* @private
* @param {de.elo.ix.client.Keyword} keyword
* @param {Object} parentDataRef
* @param {String} keywordName
*/
processChildren: function (keyword, parentDataRef, keywordName) {
var me = this,
dataRef;
parentDataRef[String(keywordName)] = {};
dataRef = parentDataRef[keywordName];
if (keyword.children) {
keyword.children.forEach(function (word) {
me.processChildren(word, dataRef, word.text);
});
}
}
});
/**
* @private
* Formats the result of a dynamic keyword list processing to
* a simple key-value list
*
* @author Michael Weiler, ELO Digital Office GmbH
* @version 1.0
*
* @eloix
* @elojc
* @eloas
*
* # Sample result
*
* "kwls": {
* "INVOICE_STATUS": {
* "formatter": "sol.common.ix.services.JsonDataCollector.FlatKwl",
* "values": ["1 Erfassung",
* "2 Formelle Prüfung",
* "3 Fachliche Prüfung]
* }
* }
*/
sol.define("sol.common.ix.services.KwlDataCollector.FlatKwl", {
extend: "sol.common.ix.services.KwlDataCollector.BaseKwl",
/**
* @cfg {Array} keyFieldName
* Name of the field that should be used as key.
*/
/**
* @cfg {Array} valueFieldName
* Name of the field that should be used as value.
*/
/**
* @private
* @return {Object} result
*/
build: function () {
var me = this,
listKey, listObj, entryKey;
me.getValues();
for (listKey in me.keywordLists) {
me.result.values = [];
listObj = me.keywordLists[listKey];
for (entryKey in listObj) {
me.result.values.push(entryKey);
}
break;
}
return me.result;
}
});
/**
* @private
* Retrieves data which is provided by dynamic keyword list
*
* @author Michael Weiler, ELO Digital Office GmbH
* @version 1.0
*
* @eloix
* @elojc
* @eloas
*/
sol.define("sol.common.ix.services.KwlDataCollector.BaseDynKwl", {
/**
* @cfg {String} scriptName
* Script name of the dynamic keyword list
*/
/**
* @cfg {String} formatter
* Class name of the task formatter
*/
/**
* @private
* Retrieves data from a dynamic keyword list by the ELO index server
*/
getValues: function () {
var me = this,
keywordsDynamicInfo, keywordsDynamicResult, linesIterator;
me.result = {
formatter: me.config.formatter,
values: {}
};
keywordsDynamicInfo = new KeywordsDynamicInfo();
keywordsDynamicInfo.mapScriptName = me.config.scriptName;
keywordsDynamicInfo.mapLineFocus = me.config.focusFieldName;
keywordsDynamicInfo.mapData = {};
if (me.config.foreignKey && me.config.foreignKeyValue) {
keywordsDynamicInfo.mapData[me.config.foreignKey] = me.config.foreignKeyValue;
}
keywordsDynamicResult = ixConnect.ix().checkoutKeywordsDynamic(keywordsDynamicInfo);
me.keyNames = me.listToJsArray(keywordsDynamicResult.keyNames);
me.lines = [];
linesIterator = keywordsDynamicResult.table.iterator();
while (linesIterator.hasNext()) {
me.lines.push(me.listToJsArray(linesIterator.next()));
}
},
/**
* @private
* Converts a Java list to a JavaScript array
* @param {java.util.List} list
* @return {Array}
*/
listToJsArray: function (list) {
var arr = [],
iterator = list.iterator();
while (iterator.hasNext()) {
arr.push(String(iterator.next()));
}
return arr;
}
});
/**
* @private
*
* Formats the result of a dynamic keyword list processing to
* a simple key-value list
*
* @author Michael Weiler, ELO Digital Office GmbH
* @version 1.0
*
* @eloix
* @elojc
* @eloas
*
* # Sample result
*
* "dynKwls": {
* "sol.invoice.ix.dynkwl.Currency": {
* "formatter": "sol.common.ix.services.JsonDataCollector.SimpleKeyMapDynKwl",
* "values": {
* "EUR": "€",
* "USD": "$"
* }
* }
* }
*/
sol.define("sol.common.ix.services.KwlDataCollector.SimpleKeyMapDynKwl", {
extend: "sol.common.ix.services.KwlDataCollector.BaseDynKwl",
/**
* @cfg {Array} keyFieldName
* Name of the field that should be used as key.
*/
/**
* @cfg {Array} valueFieldName
* Name of the field that should be used as value.
*/
build: function () {
var me = this,
keyColumnIndex, valueColumnIndex, i, line, key, value;
me.config = me.config || {};
me.config.keyFieldName = me.config.keyFieldName || "$KEY";
me.config.valueFieldName = me.config.valueFieldName || "$VALUE";
me.getValues();
keyColumnIndex = me.keyNames.indexOf(me.config.keyFieldName);
valueColumnIndex = me.keyNames.indexOf(me.config.valueFieldName);
me.result.orderedEntries = [];
for (i = 0; i < me.lines.length; i++) {
line = me.lines[i];
key = line[keyColumnIndex];
value = line[valueColumnIndex];
me.result.values[key] = value;
me.result.orderedEntries.push({ key: key, value: value });
}
return me.result;
}
});
/**
* @member sol.common.ix.services.KwlDataCollector
* @method RF_sol_common_services_KwlDataCollector
* @static
* @inheritdoc sol.common.ix.ServiceBase#RF_ServiceBaseName
*/
function RF_sol_common_services_KwlDataCollector(ec, configAny) {
var rfUtils = sol.common.ix.RfUtils,
config, jsonDataCollector, result;
logger.enter("RF_sol_common_services_KwlDataCollector", configAny);
config = rfUtils.parseAndCheckParams(ec, arguments.callee.name, configAny);
config.ec = ec;
jsonDataCollector = sol.create("sol.common.ix.services.KwlDataCollector", config);
result = jsonDataCollector.execute();
logger.exit("RF_sol_common_services_KwlDataCollector", result);
return result;
}